package com.wxp.demo06.application.global;

import android.app.Application;
import android.content.res.Configuration;

import androidx.annotation.NonNull;
import androidx.room.Room;

import com.wxp.demo06.application.room.db.BookDatabase;
import com.wxp.demo06.util.LogUtils;

import java.util.HashMap;

/**
 * Application的生命周期
 */
public class MyApplication extends Application {

    /**
     * 定义单例操作对象
     */
    private static MyApplication mApp;
    /**
     * 声明一个公共的信息映射对象，可当作全局变量使用
     */
    public HashMap<String, String> infoMap = new HashMap<>();

    /**
     * 声明一个书籍数据库对象
     */
    private BookDatabase bookDatabase;

    /**
     * 获取App实例对象
     *
     * @return App实例对象
     */
    public static MyApplication getInstance() {
        return mApp;
    }

    /**
     * 在App启动时调用
     */
    @Override
    public void onCreate() {
        super.onCreate();
        mApp = this;
        LogUtils.debug("在App启动时调用 " + MyApplication.class.getSimpleName(), " onCreate");

        // 构建书籍数据库的实例
        bookDatabase = Room.databaseBuilder(this, BookDatabase.class, "book")
                // 允许迁移数据库（发生数据库变更时，Room默认删除原数据库再创建新数据库。如此一来原来的记录会丢失，故而要改为迁移方式以便保存原有记录）
                .addMigrations()
                // 允许在主线程中操作数据库（Room默认不能在主线程中操作数据库）
                .allowMainThreadQueries()
                .build();
    }

    /**
     * 在App终止时调用
     */
    @Override
    public void onTerminate() {
        super.onTerminate();
        LogUtils.debug("在App终止时调用", "onTerminate");
    }

    /**
     * 在配置改变时调用，例如：从竖屏变为横屏
     */
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LogUtils.debug("在配置改变时调用", "onConfigurationChanged");
    }

    /**
     * 获取书籍数据库的实例
     *
     * @return 书籍数据库的实例
     */
    public BookDatabase getBookDB() {
        return bookDatabase;
    }
}
